package com.ccubee.data.transfer.transfer.type;

import com.ccubee.data.transfer.event.ColumnData;
import com.ccubee.data.transfer.types.ColumnType;
import lombok.SneakyThrows;

import java.sql.ResultSet;
import java.util.Objects;

/**
 * 数据类型特殊接口
 *
 * @Author ycf
 * @Date 2022/11/16 21:15
 * @Version 1.0
 */
public interface IType {
    /**
     * 字段类型
     *
     * @return 字段类型
     */
    ColumnType type();

    /**
     * 执行获取数据
     *
     * @param columnData sql数据
     * @param resultSet  结果集
     * @return 结果
     */
    Object apply(ColumnData columnData, ResultSet resultSet);

    /**
     * 获取数据
     *
     * @param name      名称
     * @param resultSet 结果集
     * @return 字段数据
     */
    @SneakyThrows
    default String value(String name, ResultSet resultSet) {
        return resultSet.getString(Objects.requireNonNull(name, "获取的字段名不能为空"));
    }
}
